mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-07-01 02:41:48 +00:00
Added in new headers and libraries for image version 18. This image contains a change to fix artf3773, which switched setDataSem to be a pthread_cond_t variable instead of a mutex. As a result, a few new HAL functions had to be exposed over JNI, specifically the functions for MultiWait.
Change-Id: I28be07c8102acb078440ee74ded46527328dd271
This commit is contained in:
@@ -1,3 +1,2 @@
|
||||
/usr/local/frc/JRE/bin/java
|
||||
-jar /home/lvuser/FRCUserProgram.jar
|
||||
/usr/local/frc/JRE/bin/java -jar /home/lvuser/FRCUserProgram.jar
|
||||
|
||||
|
||||
@@ -1,3 +1,2 @@
|
||||
/usr/local/frc/JRE/bin/java -XX:+UsePerfData -agentlib:jdwp=transport=dt_socket,address=8348,server=y,suspend=y
|
||||
-jar /home/lvuser/FRCUserProgram.jar
|
||||
/usr/local/frc/JRE/bin/java -XX:+UsePerfData -agentlib:jdwp=transport=dt_socket,address=8348,server=y,suspend=y -jar /home/lvuser/FRCUserProgram.jar
|
||||
|
||||
|
||||
@@ -215,7 +215,7 @@ extern "C"
|
||||
int HALGetJoystickPOVs(uint8_t joystickNum, HALJoystickPOVs *povs);
|
||||
int HALGetJoystickButtons(uint8_t joystickNum, HALJoystickButtons *buttons, uint8_t *count);
|
||||
|
||||
void HALSetNewDataSem(pthread_mutex_t *);
|
||||
void HALSetNewDataSem(pthread_cond_t *);
|
||||
|
||||
int HALInitialize(int mode = 0);
|
||||
void HALNetworkCommunicationObserveUserProgramStarting();
|
||||
|
||||
@@ -205,7 +205,7 @@ int HALGetJoystickButtons(uint8_t joystickNum, HALJoystickButtons *buttons, uint
|
||||
return FRC_NetworkCommunication_getJoystickButtons(joystickNum, buttons, count);
|
||||
}
|
||||
|
||||
void HALSetNewDataSem(pthread_mutex_t * param)
|
||||
void HALSetNewDataSem(pthread_cond_t * param)
|
||||
{
|
||||
setNewDataSem(param);
|
||||
}
|
||||
|
||||
@@ -91,7 +91,7 @@ extern "C" {
|
||||
# if defined (__vxworks)
|
||||
void EXPORT_FUNC setNewDataSem(SEM_ID);
|
||||
# else
|
||||
void EXPORT_FUNC setNewDataSem(pthread_mutex_t *);
|
||||
void EXPORT_FUNC setNewDataSem(pthread_cond_t *);
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
@@ -68,7 +68,11 @@ namespace nUsageReporting
|
||||
kResourceType_HiTechnicColorSensor,
|
||||
kResourceType_HiTechnicAccel,
|
||||
kResourceType_HiTechnicCompass,
|
||||
kResourceType_SRF08,
|
||||
kResourceType_SRF08,
|
||||
kResourceType_AnalogOutput,
|
||||
kResourceType_VictorSP,
|
||||
kResourceType_TalonSRX,
|
||||
kResourceType_CANTalonSRX,
|
||||
} tResourceType;
|
||||
|
||||
typedef enum
|
||||
|
||||
Binary file not shown.
Binary file not shown.
0
ni-libraries/libni_emb.so.7.0.0
Normal file → Executable file
0
ni-libraries/libni_emb.so.7.0.0
Normal file → Executable file
0
ni-libraries/libni_rtlog.so.2.3.0
Normal file → Executable file
0
ni-libraries/libni_rtlog.so.2.3.0
Normal file → Executable file
0
ni-libraries/libnirio_emb_can.so.14.0.0
Normal file → Executable file
0
ni-libraries/libnirio_emb_can.so.14.0.0
Normal file → Executable file
Binary file not shown.
0
ni-libraries/libvisa.so
Normal file → Executable file
0
ni-libraries/libvisa.so
Normal file → Executable file
@@ -105,7 +105,8 @@ private:
|
||||
MUTEX_ID m_statusDataSemaphore;
|
||||
Task m_task;
|
||||
SEMAPHORE_ID m_newControlData;
|
||||
MUTEX_ID m_packetDataAvailableSem;
|
||||
MULTIWAIT_ID m_packetDataAvailableMultiWait;
|
||||
MUTEX_ID m_packetDataAvailableMutex;
|
||||
MULTIWAIT_ID m_waitForDataSem;
|
||||
MUTEX_ID m_waitForDataMutex;
|
||||
double m_approxMatchTimeOffset;
|
||||
|
||||
@@ -35,7 +35,7 @@ DriverStation::DriverStation()
|
||||
: m_statusDataSemaphore (initializeMutexNormal())
|
||||
, m_task ("DriverStation", (FUNCPTR)DriverStation::InitTask)
|
||||
, m_newControlData(0)
|
||||
, m_packetDataAvailableSem (0)
|
||||
, m_packetDataAvailableMultiWait(0)
|
||||
, m_waitForDataSem(0)
|
||||
, m_approxMatchTimeOffset(-1.0)
|
||||
, m_userInDisabled(false)
|
||||
@@ -53,16 +53,19 @@ DriverStation::DriverStation()
|
||||
}
|
||||
|
||||
// Create a new semaphore
|
||||
m_packetDataAvailableSem = initializeMutexNormal();
|
||||
m_packetDataAvailableMultiWait = initializeMultiWait();
|
||||
m_newControlData = initializeSemaphore(SEMAPHORE_EMPTY);
|
||||
|
||||
// Register that semaphore with the network communications task.
|
||||
// It will signal when new packet data is available.
|
||||
HALSetNewDataSem(m_packetDataAvailableSem);
|
||||
|
||||
m_waitForDataSem = initializeMultiWait();
|
||||
m_waitForDataMutex = initializeMutexNormal();
|
||||
|
||||
m_packetDataAvailableMultiWait = initializeMultiWait();
|
||||
m_packetDataAvailableMutex = initializeMutexNormal();
|
||||
|
||||
// Register that semaphore with the network communications task.
|
||||
// It will signal when new packet data is available.
|
||||
HALSetNewDataSem(m_packetDataAvailableMultiWait);
|
||||
|
||||
AddToSingletonList();
|
||||
|
||||
if (!m_task.Start((int32_t)this))
|
||||
@@ -79,7 +82,8 @@ DriverStation::~DriverStation()
|
||||
deleteMultiWait(m_waitForDataSem);
|
||||
// Unregister our semaphore.
|
||||
HALSetNewDataSem(0);
|
||||
deleteMutex(m_packetDataAvailableSem);
|
||||
deleteMultiWait(m_packetDataAvailableMultiWait);
|
||||
deleteMutex(m_packetDataAvailableMutex);
|
||||
deleteMutex(m_waitForDataMutex);
|
||||
}
|
||||
|
||||
@@ -93,7 +97,7 @@ void DriverStation::Run()
|
||||
int period = 0;
|
||||
while (true)
|
||||
{
|
||||
takeMutex(m_packetDataAvailableSem);
|
||||
takeMultiWait(m_packetDataAvailableMultiWait, m_packetDataAvailableMutex, 0);
|
||||
GetData();
|
||||
giveMultiWait(m_waitForDataSem);
|
||||
if (++period >= 4)
|
||||
|
||||
@@ -8,14 +8,12 @@ package edu.wpi.first.wpilibj;
|
||||
|
||||
import java.nio.IntBuffer;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import edu.wpi.first.wpilibj.communication.FRCNetworkCommunicationsLibrary;
|
||||
import edu.wpi.first.wpilibj.communication.HALControlWord;
|
||||
import edu.wpi.first.wpilibj.communication.HALAllianceStationID;
|
||||
import edu.wpi.first.wpilibj.hal.HALUtil;
|
||||
import edu.wpi.first.wpilibj.hal.PowerJNI;
|
||||
import edu.wpi.first.wpilibj.Timer;
|
||||
|
||||
/**
|
||||
* Provide access to the network communication data to / from the Driver Station.
|
||||
@@ -73,6 +71,7 @@ public class DriverStation implements RobotState.Interface {
|
||||
private boolean m_userInTeleop = false;
|
||||
private boolean m_userInTest = false;
|
||||
private boolean m_newControlData;
|
||||
private final ByteBuffer m_packetDataAvailableMutex;
|
||||
private final ByteBuffer m_packetDataAvailableSem;
|
||||
|
||||
/**
|
||||
@@ -94,7 +93,8 @@ public class DriverStation implements RobotState.Interface {
|
||||
m_semaphore = new Object();
|
||||
m_dataSem = new Object();
|
||||
|
||||
m_packetDataAvailableSem = HALUtil.initializeMutexNormal();
|
||||
m_packetDataAvailableMutex = HALUtil.initializeMutexNormal();
|
||||
m_packetDataAvailableSem = HALUtil.initializeMultiWait();
|
||||
FRCNetworkCommunicationsLibrary.setNewDataSem(m_packetDataAvailableSem);
|
||||
|
||||
m_thread = new Thread(new DriverStationTask(this), "FRCDriverStation");
|
||||
@@ -116,7 +116,7 @@ public class DriverStation implements RobotState.Interface {
|
||||
private void task() {
|
||||
int safetyCounter = 0;
|
||||
while (m_thread_keepalive) {
|
||||
HALUtil.takeMutex(m_packetDataAvailableSem);
|
||||
HALUtil.takeMultiWait(m_packetDataAvailableSem, m_packetDataAvailableMutex, 0);
|
||||
synchronized (this) {
|
||||
getData();
|
||||
}
|
||||
|
||||
@@ -23,6 +23,9 @@ public class HALUtil extends JNIWrapper {
|
||||
//public static native ByteBuffer initializeSemaphore(int initialValue);
|
||||
//public static native void deleteSemaphore(ByteBuffer sem);
|
||||
//public static native byte takeSemaphore(ByteBuffer sem, int timeout);
|
||||
public static native ByteBuffer initializeMultiWait();
|
||||
public static native void deleteMultiWait(ByteBuffer sem);
|
||||
public static native byte takeMultiWait(ByteBuffer sem, ByteBuffer m, int timeOut);
|
||||
public static native short getFPGAVersion(IntBuffer status);
|
||||
public static native int getFPGARevision(IntBuffer status);
|
||||
public static native long getFPGATime(IntBuffer status);
|
||||
|
||||
@@ -342,7 +342,7 @@ JNIEXPORT jint JNICALL Java_edu_wpi_first_wpilibj_communication_FRCNetworkCommun
|
||||
JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_communication_FRCNetworkCommunicationsLibrary_setNewDataSem
|
||||
(JNIEnv * env, jclass, jobject id )
|
||||
{
|
||||
MUTEX_ID* javaId = (MUTEX_ID*)env->GetDirectBufferAddress(id);
|
||||
MULTIWAIT_ID* javaId = (MULTIWAIT_ID*)env->GetDirectBufferAddress(id);
|
||||
NETCOMM_LOG(logDEBUG) << "Mutex Ptr = " << *javaId;
|
||||
HALSetNewDataSem(*javaId);
|
||||
}
|
||||
|
||||
@@ -69,6 +69,49 @@ JNIEXPORT jbyte JNICALL Java_edu_wpi_first_wpilibj_hal_HALUtil_takeMutex
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: edu_wpi_first_wpilibj_hal_HALUtil
|
||||
* Method: initializeMultiWait
|
||||
* Signature: ()Ljava/nio/ByteBuffer;
|
||||
*/
|
||||
JNIEXPORT jobject JNICALL Java_edu_wpi_first_wpilibj_hal_HALUtil_initializeMultiWait
|
||||
(JNIEnv * env, jclass)
|
||||
{
|
||||
HALUTIL_LOG(logDEBUG) << "Calling HALUtil initializeMultiWait";
|
||||
MULTIWAIT_ID* multiWaitPtr = (MULTIWAIT_ID*)new unsigned char[4];
|
||||
*multiWaitPtr = initializeMultiWait();
|
||||
HALUTIL_LOG(logDEBUG) << "MultiWait Ptr = " << *multiWaitPtr;
|
||||
return env->NewDirectByteBuffer( multiWaitPtr, 4);
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: edu_wpi_first_wpilibj_hal_HALUtil
|
||||
* Method: deleteMultiWait
|
||||
* Signature: (Ljava/nio/ByteBuffer;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_edu_wpi_first_wpilibj_hal_HALUtil_deleteMultiWait
|
||||
(JNIEnv * env, jclass, jobject id)
|
||||
{
|
||||
HALUTIL_LOG(logDEBUG) << "Calling HALUtil deleteMultiWait";
|
||||
MULTIWAIT_ID* javaId = (MULTIWAIT_ID*)env->GetDirectBufferAddress(id);
|
||||
HALUTIL_LOG(logDEBUG) << "MultiWait Ptr = " << *javaId;
|
||||
deleteMultiWait( *javaId );
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: edu_wpi_first_wpilibj_hal_HALUtil
|
||||
* Method: takeMultiWait
|
||||
* Signature: (Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;I)B
|
||||
*/
|
||||
JNIEXPORT jbyte JNICALL Java_edu_wpi_first_wpilibj_hal_HALUtil_takeMultiWait
|
||||
(JNIEnv * env, jclass, jobject multiWaitId, jobject mutexId, jint timeout)
|
||||
{
|
||||
MULTIWAIT_ID* javaMultiWaitId = (MULTIWAIT_ID*)env->GetDirectBufferAddress(multiWaitId);
|
||||
MUTEX_ID* javaMutexId = (MUTEX_ID*)env->GetDirectBufferAddress(mutexId);
|
||||
jbyte returnValue = takeMultiWait(*javaMultiWaitId, *javaMutexId, (int32_t) timeout);
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: edu_wpi_first_wpilibj_hal_HALUtil
|
||||
* Method: getFPGAVersion
|
||||
|
||||
Reference in New Issue
Block a user