mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-21 01:01:43 +00:00
Version 4 Image
Updated the HAL library to work with the new version 3 headers from NI. There were multiple changes in this verison: more PWM generators were added, so the functions for setting PWM signals have been updated. UserWatchdog has been removed, and Watchdog has been removed from WPILib to accomodate for this. Digital selection has been consolidated to one function in the NI headers, so this has been updated in the HAL. New SPI and I2C libraries have been added, but need to be implemented in the HAL before they will work.
This commit is contained in:
committed by
Brad Miller
parent
b1ef116104
commit
4546abc8c5
@@ -129,7 +129,6 @@ public class IterativeRobot extends RobotBase {
|
||||
m_disabledInitialized = false;
|
||||
}
|
||||
if (nextPeriodReady()) {
|
||||
getWatchdog().feed();
|
||||
FRCNetworkCommunicationsLibrary.FRCNetworkCommunicationObserveUserProgramAutonomous();
|
||||
autonomousPeriodic();
|
||||
didAutonomousPeriodic = true;
|
||||
@@ -146,7 +145,6 @@ public class IterativeRobot extends RobotBase {
|
||||
m_disabledInitialized = false;
|
||||
}
|
||||
if (nextPeriodReady()) {
|
||||
getWatchdog().feed();
|
||||
FRCNetworkCommunicationsLibrary.FRCNetworkCommunicationObserveUserProgramTeleop();
|
||||
teleopPeriodic();
|
||||
didTeleopPeriodic = true;
|
||||
|
||||
@@ -41,7 +41,6 @@ public abstract class RobotBase {
|
||||
public final static String ERRORS_TO_DRIVERSTATION_PROP = "first.driverstation.senderrors";
|
||||
|
||||
protected final DriverStation m_ds;
|
||||
private final Watchdog m_watchdog = Watchdog.getInstance();
|
||||
|
||||
/**
|
||||
* Constructor for a generic robot program.
|
||||
@@ -61,7 +60,6 @@ public abstract class RobotBase {
|
||||
// }
|
||||
NetworkTable.setServerMode();//must be before b
|
||||
m_ds = DriverStation.getInstance();
|
||||
m_watchdog.setEnabled(false);
|
||||
NetworkTable.getTable(""); // forces network tables to initialize
|
||||
NetworkTable.getTable("LiveWindow").getSubTable("~STATUS~").putBoolean("LW Enabled", false);
|
||||
}
|
||||
@@ -72,26 +70,6 @@ public abstract class RobotBase {
|
||||
public void free() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Check on the overall status of the system.
|
||||
*
|
||||
* @return Is the system active (i.e. PWM motor outputs, etc. enabled)?
|
||||
*/
|
||||
public boolean isSystemActive() {
|
||||
return m_watchdog.isSystemActive();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the instance of the Watchdog timer.
|
||||
* Get the watchdog timer so the user program can either disable it or feed it when
|
||||
* necessary.
|
||||
*
|
||||
* @return The Watchdog timer.
|
||||
*/
|
||||
public Watchdog getWatchdog() {
|
||||
return m_watchdog;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if the Robot is currently disabled.
|
||||
* @return True if the Robot is currently disabled by the field controls.
|
||||
@@ -167,107 +145,100 @@ public abstract class RobotBase {
|
||||
public static void main(String args[]) { // TODO: expose main to teams?{
|
||||
boolean errorOnExit = false;
|
||||
|
||||
/* JNI Testing */
|
||||
boolean booleanTest = true;
|
||||
byte byteTest = (byte)0xa5;
|
||||
char charTest = 'X';
|
||||
short shortTest = 12346;
|
||||
int intTest = 2987654;
|
||||
long longTest = 897678665;
|
||||
float floatTest = 45.123456f;
|
||||
double doubleTest = 234E16;
|
||||
// /* JNI Testing */
|
||||
// boolean booleanTest = true;
|
||||
// byte byteTest = (byte)0xa5;
|
||||
// char charTest = 'X';
|
||||
// short shortTest = 12346;
|
||||
// int intTest = 2987654;
|
||||
// long longTest = 897678665;
|
||||
// float floatTest = 45.123456f;
|
||||
// double doubleTest = 234E16;
|
||||
|
||||
FRCNetworkCommunicationsLibrary.JNIValueParameterTest(booleanTest, byteTest, charTest, shortTest,
|
||||
intTest, longTest, floatTest, doubleTest);
|
||||
// FRCNetworkCommunicationsLibrary.JNIValueParameterTest(booleanTest, byteTest, charTest, shortTest,
|
||||
// intTest, longTest, floatTest, doubleTest);
|
||||
|
||||
boolean booleanReturn = FRCNetworkCommunicationsLibrary.JNIValueReturnBooleanTest(booleanTest);
|
||||
System.out.println("Boolean Return: " + booleanReturn );
|
||||
// boolean booleanReturn = FRCNetworkCommunicationsLibrary.JNIValueReturnBooleanTest(booleanTest);
|
||||
// System.out.println("Boolean Return: " + booleanReturn );
|
||||
|
||||
byte byteReturn = FRCNetworkCommunicationsLibrary.JNIValueReturnByteTest(byteTest);
|
||||
System.out.println("Byte Return: " + byteReturn );
|
||||
// byte byteReturn = FRCNetworkCommunicationsLibrary.JNIValueReturnByteTest(byteTest);
|
||||
// System.out.println("Byte Return: " + byteReturn );
|
||||
|
||||
char charReturn = FRCNetworkCommunicationsLibrary.JNIValueReturnCharTest(charTest);
|
||||
System.out.println("Char Return: " + charReturn );
|
||||
// char charReturn = FRCNetworkCommunicationsLibrary.JNIValueReturnCharTest(charTest);
|
||||
// System.out.println("Char Return: " + charReturn );
|
||||
|
||||
short shortReturn = FRCNetworkCommunicationsLibrary.JNIValueReturnShortTest(shortTest);
|
||||
System.out.println("Short Return: " + shortReturn );
|
||||
// short shortReturn = FRCNetworkCommunicationsLibrary.JNIValueReturnShortTest(shortTest);
|
||||
// System.out.println("Short Return: " + shortReturn );
|
||||
|
||||
int intReturn = FRCNetworkCommunicationsLibrary.JNIValueReturnIntTest(intTest);
|
||||
System.out.println("Int Return: " + intReturn );
|
||||
// int intReturn = FRCNetworkCommunicationsLibrary.JNIValueReturnIntTest(intTest);
|
||||
// System.out.println("Int Return: " + intReturn );
|
||||
|
||||
long longReturn = FRCNetworkCommunicationsLibrary.JNIValueReturnLongTest(longTest);
|
||||
System.out.println("Long Return: " + longReturn );
|
||||
// long longReturn = FRCNetworkCommunicationsLibrary.JNIValueReturnLongTest(longTest);
|
||||
// System.out.println("Long Return: " + longReturn );
|
||||
|
||||
float floatReturn = FRCNetworkCommunicationsLibrary.JNIValueReturnFloatTest(floatTest);
|
||||
System.out.println("Float Return: " + floatReturn );
|
||||
// float floatReturn = FRCNetworkCommunicationsLibrary.JNIValueReturnFloatTest(floatTest);
|
||||
// System.out.println("Float Return: " + floatReturn );
|
||||
|
||||
double doubleReturn = FRCNetworkCommunicationsLibrary.JNIValueReturnDoubleTest(doubleTest);
|
||||
System.out.println("Double Return: " + doubleReturn );
|
||||
// double doubleReturn = FRCNetworkCommunicationsLibrary.JNIValueReturnDoubleTest(doubleTest);
|
||||
// System.out.println("Double Return: " + doubleReturn );
|
||||
|
||||
|
||||
|
||||
String testValue = "This is a test string";
|
||||
// String testValue = "This is a test string";
|
||||
|
||||
String returnValue = FRCNetworkCommunicationsLibrary.JNIObjectReturnStringTest(testValue);
|
||||
// String returnValue = FRCNetworkCommunicationsLibrary.JNIObjectReturnStringTest(testValue);
|
||||
|
||||
System.out.println("String Return:" + returnValue);
|
||||
// System.out.println("String Return:" + returnValue);
|
||||
|
||||
ByteBuffer directBuffer = ByteBuffer.allocateDirect(4);
|
||||
// ByteBuffer directBuffer = ByteBuffer.allocateDirect(4);
|
||||
|
||||
directBuffer.put(0, (byte)0xFA);
|
||||
directBuffer.put(1, (byte)0xAB);
|
||||
directBuffer.put(2, (byte)0xB4);
|
||||
directBuffer.put(3, (byte)0xCD);
|
||||
// directBuffer.put(0, (byte)0xFA);
|
||||
// directBuffer.put(1, (byte)0xAB);
|
||||
// directBuffer.put(2, (byte)0xB4);
|
||||
// directBuffer.put(3, (byte)0xCD);
|
||||
|
||||
ByteBuffer returnBuffer1 = FRCNetworkCommunicationsLibrary.JNIObjectReturnByteBufferTest(directBuffer);
|
||||
// ByteBuffer returnBuffer1 = FRCNetworkCommunicationsLibrary.JNIObjectReturnByteBufferTest(directBuffer);
|
||||
|
||||
System.out.println("Return Buffer Capacity: " + returnBuffer1.capacity());
|
||||
System.out.println("ByteBuffer1 Return0: " + returnBuffer1.get(0) );
|
||||
System.out.println("ByteBuffer1 Return1: " + returnBuffer1.get(1) );
|
||||
System.out.println("ByteBuffer1 Return2: " + returnBuffer1.get(2) );
|
||||
System.out.println("ByteBuffer1 Return3: " + returnBuffer1.get(3) );
|
||||
// System.out.println("Return Buffer Capacity: " + returnBuffer1.capacity());
|
||||
// System.out.println("ByteBuffer1 Return0: " + returnBuffer1.get(0) );
|
||||
// System.out.println("ByteBuffer1 Return1: " + returnBuffer1.get(1) );
|
||||
// System.out.println("ByteBuffer1 Return2: " + returnBuffer1.get(2) );
|
||||
// System.out.println("ByteBuffer1 Return3: " + returnBuffer1.get(3) );
|
||||
|
||||
|
||||
ByteBuffer directByteBuffer = ByteBuffer.allocateDirect(4);
|
||||
// set to little endian for C++
|
||||
directByteBuffer.order(ByteOrder.LITTLE_ENDIAN);
|
||||
// ByteBuffer directByteBuffer = ByteBuffer.allocateDirect(4);
|
||||
//set to little endian for C++
|
||||
// directByteBuffer.order(ByteOrder.LITTLE_ENDIAN);
|
||||
|
||||
directByteBuffer.putInt(0,2874933);
|
||||
// directByteBuffer.putInt(0,2874933);
|
||||
|
||||
System.out.println("Param In: " + directByteBuffer.getInt(0));
|
||||
System.out.println("Param In Byte0: " + directByteBuffer.get(0) );
|
||||
System.out.println("Param In Byte1: " + directByteBuffer.get(1) );
|
||||
System.out.println("Param In Byte2: " + directByteBuffer.get(2) );
|
||||
System.out.println("Param In Byte3: " + directByteBuffer.get(3) );
|
||||
// System.out.println("Param In: " + directByteBuffer.getInt(0));
|
||||
// System.out.println("Param In Byte0: " + directByteBuffer.get(0) );
|
||||
// System.out.println("Param In Byte1: " + directByteBuffer.get(1) );
|
||||
// System.out.println("Param In Byte2: " + directByteBuffer.get(2) );
|
||||
// System.out.println("Param In Byte3: " + directByteBuffer.get(3) );
|
||||
|
||||
|
||||
ByteBuffer returnBuffer2 = FRCNetworkCommunicationsLibrary.JNIObjectAndParamReturnIntBufferTest(directByteBuffer.asIntBuffer());
|
||||
// ByteBuffer returnBuffer2 = FRCNetworkCommunicationsLibrary.JNIObjectAndParamReturnIntBufferTest(directByteBuffer.asIntBuffer());
|
||||
|
||||
System.out.println("Param Out: " + directByteBuffer.getInt(0));
|
||||
|
||||
|
||||
|
||||
System.out.println("Return Buffer Capacity: " + returnBuffer2.capacity());
|
||||
System.out.println("ByteBuffer2 Return0: " + returnBuffer2.get(0) );
|
||||
System.out.println("ByteBuffer2 Return1: " + returnBuffer2.get(1) );
|
||||
System.out.println("ByteBuffer2 Return2: " + returnBuffer2.get(2) );
|
||||
System.out.println("ByteBuffer2 Return3: " + returnBuffer2.get(3) );
|
||||
|
||||
System.out.println("Byte Order from C++" + returnBuffer2.order().toString());
|
||||
System.out.println("ByteBuffer2 as Int" + returnBuffer2.getInt(0));
|
||||
// change to little endian
|
||||
returnBuffer2.order(ByteOrder.LITTLE_ENDIAN);
|
||||
System.out.println("ByteBuffer2 as Int" + returnBuffer2.getInt(0));
|
||||
// System.out.println("Param Out: " + directByteBuffer.getInt(0));
|
||||
|
||||
|
||||
|
||||
// System.out.println("Return Buffer Capacity: " + returnBuffer2.capacity());
|
||||
// System.out.println("ByteBuffer2 Return0: " + returnBuffer2.get(0) );
|
||||
// System.out.println("ByteBuffer2 Return1: " + returnBuffer2.get(1) );
|
||||
// System.out.println("ByteBuffer2 Return2: " + returnBuffer2.get(2) );
|
||||
// System.out.println("ByteBuffer2 Return3: " + returnBuffer2.get(3) );
|
||||
|
||||
// System.out.println("Byte Order from C++" + returnBuffer2.order().toString());
|
||||
// System.out.println("ByteBuffer2 as Int" + returnBuffer2.getInt(0));
|
||||
//change to little endian
|
||||
// returnBuffer2.order(ByteOrder.LITTLE_ENDIAN);
|
||||
// System.out.println("ByteBuffer2 as Int" + returnBuffer2.getInt(0));
|
||||
|
||||
/* End JNI Testing */
|
||||
FRCNetworkCommunicationsLibrary.FRCNetworkCommunicationReserve();
|
||||
FRCNetworkCommunicationsLibrary.FRCNetworkCommunicationObserveUserProgramStarting();
|
||||
Watchdog.getInstance().setExpiration(0.1);
|
||||
Watchdog.getInstance().setEnabled(false);
|
||||
|
||||
UsageReporting.report(tResourceType.kResourceType_Language, tInstances.kLanguage_Java);
|
||||
|
||||
|
||||
@@ -1,206 +0,0 @@
|
||||
/*----------------------------------------------------------------------------*/
|
||||
/* Copyright (c) FIRST 2008-2012. 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. */
|
||||
/*----------------------------------------------------------------------------*/
|
||||
package edu.wpi.first.wpilibj;
|
||||
|
||||
import java.util.logging.*;
|
||||
import java.nio.ByteOrder;
|
||||
import java.nio.IntBuffer;
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
//import com.sun.jna.Pointer;
|
||||
|
||||
|
||||
import edu.wpi.first.wpilibj.hal.WatchdogJNI;
|
||||
import edu.wpi.first.wpilibj.hal.HALUtil;
|
||||
import edu.wpi.first.wpilibj.parsing.IUtility;
|
||||
|
||||
/**
|
||||
* Watchdog timer class. The watchdog timer is designed to keep the robots safe.
|
||||
* The idea is that the robot program must constantly "feed" the watchdog
|
||||
* otherwise it will shut down all the motor outputs. That way if a program
|
||||
* breaks, rather than having the robot continue to operate at the last known
|
||||
* speed, the motors will be shut down.
|
||||
*
|
||||
* This is serious business. Don't just disable the watchdog. You can't afford
|
||||
* it!
|
||||
*
|
||||
* http://thedailywtf.com/Articles/_0x2f__0x2f_TODO_0x3a__Uncomment_Later.aspx
|
||||
*/
|
||||
public class Watchdog extends SensorBase implements IUtility {
|
||||
private static Logger logger = Logger.getLogger("Watchdog");
|
||||
private static ConsoleHandler ch = new ConsoleHandler();
|
||||
private static Watchdog m_instance;
|
||||
private ByteBuffer m_watchDog;
|
||||
|
||||
static
|
||||
{
|
||||
logger.addHandler(ch);
|
||||
logger.setLevel(Level.ALL);
|
||||
}
|
||||
|
||||
/**
|
||||
* The Watchdog is born.
|
||||
*/
|
||||
protected Watchdog() {
|
||||
// allocate direct
|
||||
ByteBuffer status = ByteBuffer.allocateDirect(4);
|
||||
// set the byte order
|
||||
status.order(ByteOrder.LITTLE_ENDIAN);
|
||||
m_watchDog = WatchdogJNI.initializeWatchdog(status.asIntBuffer());
|
||||
// set the byte order for the return value
|
||||
m_watchDog.order(ByteOrder.LITTLE_ENDIAN);
|
||||
logger.info("Initialize Watchdog Status = " + status.getInt(0) );
|
||||
logger.info("Watchdog Handle Length = " + m_watchDog.capacity() );
|
||||
logger.info("Watchdog Handle Value:" + m_watchDog.getInt(0));
|
||||
HALUtil.checkStatus(status.asIntBuffer());
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an instance of the watchdog
|
||||
*
|
||||
* @return an instance of the watchdog
|
||||
*/
|
||||
public static synchronized Watchdog getInstance() {
|
||||
if (m_instance == null) {
|
||||
m_instance = new Watchdog();
|
||||
}
|
||||
return m_instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Throw the dog a bone.
|
||||
*
|
||||
* When everything is going well, you feed your dog when you get home. Let's
|
||||
* hope you don't drive your car off a bridge on the way home... Your dog
|
||||
* won't get fed and he will starve to death.
|
||||
*
|
||||
* By the way, it's not cool to ask the neighbor (some random task) to feed
|
||||
* your dog for you. He's your responsibility!
|
||||
*/
|
||||
public void feed() {
|
||||
IntBuffer status = ByteBuffer.allocateDirect(4).asIntBuffer();
|
||||
WatchdogJNI.feedWatchdog(m_watchDog, status);
|
||||
HALUtil.checkStatus(status);
|
||||
}
|
||||
|
||||
/**
|
||||
* Put the watchdog out of its misery.
|
||||
*
|
||||
* Don't wait for your dying robot to starve when there is a problem. Kill
|
||||
* it quickly, cleanly, and humanely.
|
||||
*/
|
||||
public void kill() {
|
||||
IntBuffer status = ByteBuffer.allocateDirect(4).asIntBuffer();
|
||||
WatchdogJNI.killWatchdog(m_watchDog, status);
|
||||
HALUtil.checkStatus(status);
|
||||
}
|
||||
|
||||
/**
|
||||
* Read how long it has been since the watchdog was last fed.
|
||||
*
|
||||
* @return The number of seconds since last meal.
|
||||
*/
|
||||
public double getTimer() {
|
||||
IntBuffer status = ByteBuffer.allocateDirect(4).asIntBuffer();
|
||||
double value = WatchdogJNI.getWatchdogLastFed(m_watchDog, status);
|
||||
HALUtil.checkStatus(status);
|
||||
return value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Read what the current expiration is.
|
||||
*
|
||||
* @return The number of seconds before starvation following a meal
|
||||
* (watchdog starves if it doesn't eat this often).
|
||||
*/
|
||||
public double getExpiration() {
|
||||
IntBuffer status = ByteBuffer.allocateDirect(4).asIntBuffer();
|
||||
double value = WatchdogJNI.getWatchdogExpiration(m_watchDog, status);
|
||||
HALUtil.checkStatus(status);
|
||||
return value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configure how many seconds your watchdog can be neglected before it
|
||||
* starves to death.
|
||||
*
|
||||
* @param expiration
|
||||
* The number of seconds before starvation following a meal
|
||||
* (watchdog starves if it doesn't eat this often).
|
||||
*/
|
||||
public void setExpiration(double expiration) {
|
||||
// allocate direct
|
||||
ByteBuffer status = ByteBuffer.allocateDirect(4);
|
||||
// set to c++ byte order
|
||||
status.order(ByteOrder.LITTLE_ENDIAN);
|
||||
WatchdogJNI.setWatchdogExpiration(m_watchDog, expiration, status.asIntBuffer());
|
||||
HALUtil.checkStatus(status.asIntBuffer());
|
||||
}
|
||||
|
||||
/**
|
||||
* Find out if the watchdog is currently enabled or disabled (mortal or
|
||||
* immortal).
|
||||
*
|
||||
* @return Enabled or disabled.
|
||||
*/
|
||||
public boolean getEnabled() {
|
||||
IntBuffer status = ByteBuffer.allocateDirect(4).asIntBuffer();
|
||||
boolean value = WatchdogJNI.getWatchdogEnabled(m_watchDog, status) != 0;
|
||||
HALUtil.checkStatus(status);
|
||||
return value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable or disable the watchdog timer.
|
||||
*
|
||||
* When enabled, you must keep feeding the watchdog timer to keep the
|
||||
* watchdog active, and hence the dangerous parts (motor outputs, etc.) can
|
||||
* keep functioning. When disabled, the watchdog is immortal and will remain
|
||||
* active even without being fed. It will also ignore any kill commands
|
||||
* while disabled.
|
||||
*
|
||||
* @param enabled
|
||||
* Enable or disable the watchdog.
|
||||
*/
|
||||
public void setEnabled(final boolean enabled) {
|
||||
IntBuffer status = ByteBuffer.allocateDirect(4).asIntBuffer();
|
||||
WatchdogJNI.setWatchdogEnabled(m_watchDog, (byte) (enabled ? 1 : 0),
|
||||
status);
|
||||
HALUtil.checkStatus(status);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check in on the watchdog and make sure he's still kicking.
|
||||
*
|
||||
* This indicates that your watchdog is allowing the system to operate. It
|
||||
* is still possible that the network communications is not allowing the
|
||||
* system to run, but you can check this to make sure it's not your fault.
|
||||
* Check isSystemActive() for overall system status.
|
||||
*
|
||||
* If the watchdog is disabled, then your watchdog is immortal.
|
||||
*
|
||||
* @return Is the watchdog still alive?
|
||||
*/
|
||||
public boolean isAlive() {
|
||||
IntBuffer status = ByteBuffer.allocateDirect(4).asIntBuffer();
|
||||
boolean value = WatchdogJNI.isWatchdogAlive(m_watchDog, status) != 0;
|
||||
HALUtil.checkStatus(status);
|
||||
return value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check on the overall status of the system.
|
||||
*
|
||||
* @return Is the system active (i.e. PWM motor outputs, etc. enabled)?
|
||||
*/
|
||||
public boolean isSystemActive() {
|
||||
IntBuffer status = ByteBuffer.allocateDirect(4).asIntBuffer();
|
||||
boolean value = WatchdogJNI.isWatchdogSystemActive(m_watchDog, status) != 0;
|
||||
HALUtil.checkStatus(status);
|
||||
return value;
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
package edu.wpi.first.wpilibj.hal;
|
||||
|
||||
import java.nio.IntBuffer;
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
public class WatchdogJNI extends JNIWrapper {
|
||||
public static native ByteBuffer initializeWatchdog(IntBuffer status);
|
||||
public static native void cleanWatchdog(ByteBuffer watchdog_pointer, IntBuffer status);
|
||||
public static native byte feedWatchdog(ByteBuffer watchdog_pointer, IntBuffer status);
|
||||
public static native void killWatchdog(ByteBuffer watchdog_pointer, IntBuffer status);
|
||||
public static native double getWatchdogLastFed(ByteBuffer watchdog_pointer, IntBuffer status);
|
||||
public static native double getWatchdogExpiration(ByteBuffer watchdog_pointer, IntBuffer status);
|
||||
public static native void setWatchdogExpiration(ByteBuffer watchdog_pointer, double expiration, IntBuffer status);
|
||||
public static native byte getWatchdogEnabled(ByteBuffer watchdog_pointer, IntBuffer status);
|
||||
public static native void setWatchdogEnabled(ByteBuffer watchdog_pointer, byte enabled, IntBuffer status);
|
||||
public static native byte isWatchdogAlive(ByteBuffer watchdog_pointer, IntBuffer status);
|
||||
public static native byte isWatchdogSystemActive(ByteBuffer watchdog_pointer, IntBuffer status);
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user