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:
Fredric Silberberg
2014-11-16 16:57:02 -05:00
parent 6f4d6ed998
commit c6891fc034
19 changed files with 75 additions and 22 deletions

View File

@@ -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)